home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue35 / alfresco / CountFib.dpr next >
Encoding:
Text File  |  1998-05-26  |  1.4 KB  |  77 lines

  1. program CountFib;
  2.  
  3. {$IFDEF Win32}
  4. {$APPTYPE CONSOLE}
  5. {$ENDIF}
  6.  
  7. uses
  8.   {$IFDEF Windows}
  9.   WinCrt, WinTypes, WinProcs,
  10.   {$ELSE}
  11.   Windows,
  12.   {$ENDIF}
  13.   SysUtils;
  14.  
  15. {$IFDEF Windows}
  16. type
  17.   cardinal = longint;
  18. {$ENDIF}
  19.  
  20. var
  21.   FibCount : longint;
  22.  
  23. function Fibonacci(N : cardinal) : cardinal;
  24. begin
  25.   inc(FibCount);
  26.   if N <= 1 then
  27.     Result := 1
  28.   else
  29.     Result := Fibonacci(N-1) + Fibonacci(N-2);
  30. end;
  31.  
  32. function FastFib(N : cardinal) : cardinal;
  33. var
  34.   i : cardinal;
  35.   FibN : cardinal;
  36.   FibNminus1 : cardinal;
  37.   FibNminus2 : cardinal;
  38. begin
  39.   if (N <= 1) then
  40.     Result := 1
  41.   else begin
  42.     FibNminus1 := 1;
  43.     FibNminus2 := 1;
  44.     for i := 2 to N do begin
  45.       FibN := FibNminus1 + FibNminus2;
  46.       FibNminus2 := FibNminus1;
  47.       FibNminus1 := FibN;
  48.     end;
  49.     Result := FibN;
  50.   end;
  51. end;
  52.  
  53. var
  54.   i : integer;
  55.   Fib : longint;
  56.   StartTime, EndTime : integer;
  57. begin
  58.   writeln('  N FibonacciN  CallCount');
  59.   for i := 0 to 35 do begin
  60.     FibCount := 0;
  61.     StartTime := GetTickCount;
  62.     Fib := Fibonacci(i);
  63.     EndTime := GetTickCount;
  64.     writeln(i:3, Fib:11, FibCount:11);
  65.   end;
  66.   writeln('Time for last calculation: ', EndTime-StartTime);
  67.   writeln('  N FibonacciN');
  68.   for i := 0 to 35 do begin
  69.     StartTime := GetTickCount;
  70.     Fib := FastFib(i);
  71.     EndTime := GetTickCount;
  72.     writeln(i:3, Fib:11);
  73.   end;
  74.   writeln('Time for last calculation: ', EndTime-StartTime);
  75.   readln;
  76. end.
  77.